package com.pushtalk.service;

import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;
import com.pushtalk.Config;
import com.pushtalk.MainPush;
import com.pushtalk.dao.BussDAO;
import com.pushtalk.entity.BussApp;
import com.pushtalk.utils.LogUtil;

/**
 * 监听业务系统的定时任务,异构数据迁移
 * 用于：
 * 	待办事务表数据引入（做后续的待办提醒推送）
 *  Log表数据引入（做日志分析推送）
 *  HRM数据变动引入（做组织架构同步，离职同事审计...）
 *  自动化数据采集（做ETL自动获取，数据分析，特殊应用需要修改程序）
 * @author wx
 *
 */
public class ListenBussTask extends java.util.TimerTask {

	Logger logger = Logger.getLogger(ListenBussTask.class);
	List<BussApp> BussAppListeners =new ArrayList<BussApp>();

	@Override
	public void run() {

		initPullService();

		// 开始拉取业务数据
		try {
			ListenBussApps();
		} catch (Exception e) {
			e.printStackTrace();
			LogUtil.error(logger, e.getMessage());
		}
	}

	//监听数据拉取服务初始化
	private void initPullService() {
		if (BussAppListeners.isEmpty()) {
			BussAppListeners = BussDAO.getAllBussApp(Config.RunningEnvironment);

			// 手动添加监听
			if (Config.RunningEnvironment.equals("Debug")) {
				fastAddBussApp(BussAppListeners);
			}

			for (BussApp bu : BussAppListeners) {
				// MaxID表的初始化，新建BussType
				if (BussDAO.GetMaxID(bu.getBussType()).equals("")) {
					BussDAO.MaxIDInit(bu.getBussType());
				}
			}

			setBussAppListeners(BussAppListeners);
			WriteText("载入监听服务： ok ");
		}
	}

	// 手动添加监听,用于快速测试数据，或生产环境不容易更新数据库的情况的固定写入
	private void fastAddBussApp(List<BussApp> bussApps) {
		BussApp app = new BussApp();
		app.setBussType("MyDemo1");
		app.setDbDriver("net.sourceforge.jtds.jdbc.Driver");
		app.setDbPassword("mysql");
		app.setDbUrl("jdbc:mysql://localhost:33060/pushtalk");
		app.setDbUser("root");
		app.setId("999");
		app.setIDField("ID");
		app.setJoinID("ID");
		app.setJoinIDType("int");
		app.setLinkURLField("URL");
		app.setListenSQL("SELECT  ID,Username,NotifyMSG,URL FROM tkBussDemo where 1=1");
		app.setSubjectField("NotifyMSG");
		app.setUsernameField("Username");
		// # RunningEnvironment运行环境
		// # 1、Production ：生产 2、Test ：测试 3、Debug ：本地测试
		app.setRunningEnvironment("Debug");

		bussApps.add(app);
	}

	private void ListenBussApps() {

		if (getBussAppListeners().size() > 0) {
			// 依次执行数据更新，更新到待发提醒表
			for (BussApp BussApp : getBussAppListeners()) {
				ExeBussDataImport(BussApp);
				WriteText("拉取服务： " + BussApp.getBussType() + " -- Scaning... ");
			}
		}
	}

	private void ExeBussDataImport(BussApp BussApp) {
		String backStr = BussDAO.InsertNewNotify(BussApp);
		if (backStr.length() > 0)
			WriteText("业务抓取ID更新 : " + backStr);
	}

	public List<BussApp> getBussAppListeners() {
		return BussAppListeners;
	}

	public void setBussAppListeners(List<BussApp> BussAppListeners) {
		this.BussAppListeners = BussAppListeners;
	}

	void WriteText(String text) {
		logger.info(text);
	}

	void WriteText(int text) {
		logger.info(text);
	}

}